+TEST(EffectChainTest, RewritingWorksAndTexturesAreAskedForsRGB) {
+ unsigned char data[] = {
+ 0, 64,
+ 128, 255,
+ };
+ float expected_data[4] = {
+ 1.0f, 0.9771f,
+ 0.8983f, 0.0f,
+ };
+ float out_data[2];
+ EffectChainTester tester(NULL, 2, 2);
+ tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_sRGB);
+ RewritingToInvertEffect *effect = new RewritingToInvertEffect();
+ tester.get_chain()->add_effect(effect);
+ tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_sRGB);
+
+ Node *node = effect->invert_node;
+ ASSERT_EQ(1, node->incoming_links.size());
+ ASSERT_EQ(1, node->outgoing_links.size());
+ EXPECT_EQ("FlatInput", node->incoming_links[0]->effect->effect_type_id());
+ EXPECT_EQ("GammaCompressionEffect", node->outgoing_links[0]->effect->effect_type_id());
+
+ expect_equal(expected_data, out_data, 2, 2);
+}
+
+TEST(EffectChainTest, RewritingWorksAndColorspaceConversionsAreInserted) {
+ float data[] = {
+ 0.0f, 0.25f, 0.3f,
+ 0.75f, 1.0f, 1.0f,
+ };
+ float expected_data[6] = {
+ 1.0f, 0.75f, 0.7f,
+ 0.25f, 0.0f, 0.0f,
+ };
+ float out_data[6];
+ EffectChainTester tester(data, 3, 2, FORMAT_GRAYSCALE, COLORSPACE_REC_601_525, GAMMA_LINEAR);
+ RewritingToInvertEffect *effect = new RewritingToInvertEffect();
+ tester.get_chain()->add_effect(effect);
+ tester.run(out_data, GL_RED, COLORSPACE_REC_601_525, GAMMA_LINEAR);
+
+ Node *node = effect->invert_node;
+ ASSERT_EQ(1, node->incoming_links.size());
+ ASSERT_EQ(1, node->outgoing_links.size());
+ EXPECT_EQ("ColorspaceConversionEffect", node->incoming_links[0]->effect->effect_type_id());
+ EXPECT_EQ("ColorspaceConversionEffect", node->outgoing_links[0]->effect->effect_type_id());
+
+ expect_equal(expected_data, out_data, 3, 2);
+}
+